package ar.edu.utn.frgp.Banco.model;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

import ar.edu.utn.frgp.Banco.model.enums.Estado;
import ar.edu.utn.frgp.Banco.model.enums.TipoCuenta;

@Entity(name = "cuentas")
public class Cuenta extends EntityBase implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "id", unique = true, nullable = false)
	private Integer nrocuenta;

	@ManyToOne(targetEntity = Cliente.class, fetch = FetchType.LAZY)
	private Cliente cliente;

	@Enumerated(EnumType.STRING)
	@Column(name = "tipoCuenta", nullable = false)
	private TipoCuenta tipo;

	@Enumerated(EnumType.STRING)
	@Column(name = "estado")
	private Estado estado;

	@Column(name = "saldo")
	private double saldo;

	@Column(name = "descubierto")
	private double descubierto;
	
	@OneToMany(targetEntity=Movimiento.class, mappedBy="idMovimiento", fetch=FetchType.LAZY)
	private List<Movimiento> movimientos;

	public Cuenta() {
	}

	public Cliente getCliente() {
		return cliente;
	}

	public double getDescubierto() {
		return descubierto;
	}

	public Estado getEstado() {
		return estado;
	}

	@Override
	public int getId() {
		return this.nrocuenta;
	}

	public List<Movimiento> getMovimientos() {
		return movimientos;
	}

	public double getSaldo() {
		return saldo;
	}

	
	public TipoCuenta getTipo() {
		return tipo;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public void setDescubierto(double descubierto) {
		this.descubierto = descubierto;
	}

	public void setEstado(Estado estado) {
		this.estado = estado;
	}

	@Override
	public void setId(int id) {
		this.nrocuenta = id;
	}

	public void setMovimientos(List<Movimiento> movimientos) {
		this.movimientos = movimientos;
	}

	public void setSaldo(double saldo) {
		this.saldo = saldo;
	}

	public void setTipo(TipoCuenta tipo) {
		this.tipo = tipo;
	}

	@Override
	public String toString() {
		StringBuilder builder = new StringBuilder();
		builder.append(nrocuenta);
		builder.append(" - ");
		builder.append(tipo);
		builder.append(" - ");
		builder.append(saldo);
		return builder.toString();
	}

}
